home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 8 / QRZ Ham Radio Callsign Database - Volume 8.iso / pc / files / t_jnos / j109lxa4.tgz / j109lxa4.tar / ripcmd.c < prev    next >
C/C++ Source or Header  |  1994-06-04  |  3KB  |  195 lines

  1. /* RIP-related user commands
  2.  *   Al Broscious, N3FCT
  3.  *   Phil Karn, KA9Q
  4.  */
  5. #include <stdio.h>
  6. #include "global.h"
  7. #include "mbuf.h"
  8. #include "netuser.h"
  9. #include "internet.h"
  10. #include "cmdparse.h"
  11. #include "timer.h"
  12. #include "iface.h"
  13. #include "udp.h"
  14. #include "rip.h"
  15. #include "commands.h"
  16.  
  17. struct cmds Ripcmds[] = {
  18.     "accept",    dodroprefuse,    0,    2,
  19.         "rip accept <gateway> ",
  20.     "add",        doripadd,    0,    3,
  21.         "rip add <dest> <interval> [<flags>]",
  22.     "drop",        doripdrop,    0,    2,
  23.         "rip drop <dest>",
  24.     "kick",    doripkick,        0,    0,    NULLCHAR,
  25.     "merge",    doripmerge,    0,    0,    NULLCHAR,
  26.     "refuse",    doaddrefuse,    0,    2,
  27.         "rip refuse <gateway>",    
  28.     "request",    doripreq,    0,    2,    NULLCHAR,
  29.     "status",    doripstat,    0,    0,    NULLCHAR,
  30.     "trace",    doriptrace,    0,    0,    NULLCHAR,
  31.     "ttl",        doripttl,    0,    0,    NULLCHAR,
  32.     NULLCHAR,
  33. };
  34.  
  35. int
  36. dorip(argc,argv,p)
  37. int argc;
  38. char *argv[];
  39. void *p;
  40. {
  41.     return subcmd(Ripcmds,argc,argv,p);
  42. }
  43.  
  44. /* Add an entry to the RIP output list */
  45. int
  46. doripadd(argc,argv,p)
  47. int argc;
  48. char *argv[];
  49. void *p;
  50. {
  51.     char flags = 0;
  52.  
  53.     if(argc > 3)
  54.         flags = atoi(argv[3]);
  55.  
  56.     return rip_add(resolve(argv[1]),atol(argv[2]),flags);
  57. }
  58.  
  59. /* Add an entry to the RIP refuse list */
  60. int
  61. doaddrefuse(argc,argv,p)
  62. int argc;
  63. char *argv[];
  64. void *p;
  65. {
  66.     return riprefadd(resolve(argv[1]));
  67. }
  68.  
  69. /* Drop an entry from the RIP output list */
  70. int
  71. doripdrop(argc,argv,p)
  72. int argc;
  73. char *argv[];
  74. void *p;
  75. {
  76.     return rip_drop(resolve(argv[1]));
  77. }
  78.  
  79. int
  80. doripkick(argc,argv,p)
  81. int argc;
  82. char *argv[];
  83. void *p;
  84. {
  85.     register struct rip_list *rl;
  86.  
  87.     rl = (struct rip_list *)Rip_list;
  88.     if(Rip_list != NULLRL)
  89.         for(rl = Rip_list; rl != NULLRL; rl = rl->next)
  90.             rip_shout(rl);
  91.     return 0;
  92. }
  93.  
  94. /* Drop an entry from the RIP refuse list */
  95. int
  96. dodroprefuse(argc,argv,p)
  97. int argc;
  98. char *argv[];
  99. void *p;
  100. {
  101.     return riprefdrop(resolve(argv[1]));
  102. }
  103.  
  104. /* Initialize the RIP listener */
  105. int
  106. doripinit(argc,argv,p)
  107. int argc;
  108. char *argv[];
  109. void *p;
  110. {
  111.     return rip_init();
  112. }
  113. int
  114. doripstop(argc,argv,p)
  115. int argc;
  116. char *argv[];
  117. void *p;
  118. {
  119.     del_udp(Rip_cb);
  120.     Rip_cb = NULLUDP;
  121.     return 0;
  122. }
  123. int
  124. doripreq(argc,argv,p)
  125. int argc;
  126. char *argv[];
  127. void *p;
  128. {
  129.     int16 replyport;
  130.  
  131.     if(argc > 2)
  132.         replyport = atoi(argv[2]);
  133.     else
  134.         replyport = RIP_PORT;
  135.     return ripreq(resolve(argv[1]),replyport);
  136. }
  137. /* Dump RIP statistics */
  138. int
  139. doripstat(argc,argv,p)
  140. int argc;
  141. char *argv[];
  142. void *p;
  143. {
  144.     struct rip_list *rl;
  145.     struct rip_refuse *rfl;
  146.  
  147.     tprintf("RIP: sent %lu rcvd %lu reqst %lu resp %lu unk %lu refused %lu\n",
  148.      Rip_stat.output, Rip_stat.rcvd, Rip_stat.request, Rip_stat.response,
  149.      Rip_stat.unknown,Rip_stat.refusals);
  150.     if(Rip_list != NULLRL){
  151.         tprintf("Active RIP output interfaces:\n");
  152.         tprintf("Dest Addr       Interval Split\n");
  153.         for(rl=Rip_list; rl != NULLRL; rl = rl->next){
  154.             if(tprintf("%-16s%-9lu%-6u\n",
  155.              inet_ntoa(rl->dest),rl->interval,
  156.              !!(rl->flags&RIP_SPLIT)) == EOF)
  157.                 break;
  158.         }
  159.     }
  160.     if(Rip_refuse != NULLREF){
  161.         tprintf("Refusing announcements from gateways:\n");
  162.         for(rfl=Rip_refuse; rfl != NULLREF;rfl = rfl->next){
  163.             if(tprintf("%s\n",inet_ntoa(rfl->target)) == EOF)
  164.                 break;
  165.         }
  166.     }
  167.     return 0;
  168. }
  169.  
  170. int
  171. doriptrace(argc,argv,p)
  172. int argc;
  173. char *argv[];
  174. void *p;
  175. {
  176.     return setshort(&Rip_trace,"RIP tracing",argc,argv);
  177. }
  178.  
  179. int
  180. doripttl(argc,argv,p)
  181. int argc;
  182. char *argv[];
  183. void *p;
  184. {
  185.     return setlong(&Rip_ttl,"RIP route ttl",argc,argv);
  186. }
  187. int
  188. doripmerge(argc,argv,p)
  189. int argc;
  190. char *argv[];
  191. void *p;
  192. {
  193.     return setbool(&Rip_merge,"RIP merging",argc,argv);
  194. }
  195.